package top.kaoshanji.p1ch08a;

/**
 * 代码清单-p1ch08a-173页a：组合与继承相结合
 * author kaoshanji
 * ^_^
 * create time 2025/3/9 16:04
 */
public class PlaceSetting extends Custom {

    private Spoon sp;
    private Fork frk;
    private Knife kn;
    private DinnerPlate pl;

    public PlaceSetting(int i) {
        super(i + 1);

        // 首先初始化基类，即使是继承相同的基类，基类也会被多次初始化
        sp = new Spoon(i + 2);
        frk = new Fork(i + 3);
        kn = new Knife(i + 4);
        pl = new DinnerPlate(i + 5);
        System.out.println("PlaceSetting constructor");
    }

    public static void main(String[] args) {
        new PlaceSetting(99);
    }

}

class Plate {
    Plate(int i) {
        System.out.println("Plate constructor");
    }
}

class DinnerPlate extends Plate {
     DinnerPlate(int i) {
         super(i);
        System.out.println("DinnerPlate constructor");
    }
}


class Utensil {
    Utensil(int i) {
        System.out.println("Utensil constructor");
    }
}

class Spoon extends Utensil {
    Spoon(int i) {
        super(i);
        System.out.println("Spoon constructor");
    }
}

class Fork extends Utensil {
    Fork(int i) {
        super(i);
        System.out.println("Fork constructor");
    }
}

class Knife extends Utensil {
    Knife(int i) {
        super(i);
        System.out.println("Knife constructor");
    }
}

// 一种做事情的惯用法
class Custom {
    Custom(int i) {
        System.out.println("Custom constructor");
    }
}
